#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2021/8/3 11:11
# @Author  : Samge
from enum import Enum

from itkz.resources.utils import config_util


class CbType(Enum):
    # 控件类型
    proxy = 0  # 代理
    agent = 1  # use-agent
    splash = 1  # splash


def get_cb_cache_key(cb_type):
    if cb_type == CbType.proxy:
        return 'use_proxy_value'
    elif cb_type == CbType.agent:
        return 'use_agent_value'
    elif cb_type == CbType.splash:
        return 'use_splash_value'
    return None


def get_cb_view(gui, cb_type):
    """
    获取控件view
        try catch 是防止部分view中没配置对应选项导致
    :param cb_type:
    :return:
    """
    cb_view = None
    try:
        if cb_type == CbType.proxy:
            cb_view = gui.cb_use_proxy
        elif cb_type == CbType.agent:
            cb_view = gui.cb_use_agent
        elif cb_type == CbType.splash:
            cb_view = gui.cb_use_splash
        return cb_view
    except Exception as e:
        return None


class CommonCbStatus(object):

    """
    是否使用代理、是否使用agent、是否使用splash 的选择框统一配置
    """

    def __init__(self, gui):
        self.gui = gui

    def name(self):
        return self.gui.name()

    def init_config_value(self):
        """
        复显配置
        :return:
        """
        self.parse_config(is_save=False)

    def save_config_value(self):
        """
        保存当前选中的配置信息
        :return:
        """
        self.parse_config(is_save=True)

    def isChecked(self, cb_type):
        """
        控件是否选中
        :param cb_type:
        :return:
        """
        cb_view = get_cb_view(self.gui, cb_type)
        if not cb_view:
            return False
        return cb_view.isChecked()

    def use_proxy(self):
        return self.isChecked(CbType.proxy)

    def use_agent(self):
        return self.isChecked(CbType.agent)

    def use_splash(self):
        return self.isChecked(CbType.splash)

    def parse_cb(self, cb_type, is_save=False):
        """
        处理单选框的的状态初始化 与 状态保存
        :param cb_type:
        :param is_save:
        :return:
        """
        cb_view = get_cb_view(self.gui, cb_type)
        if not cb_view:
            return
        if is_save:
            config_util.setValue(f"{self.name()}/{get_cb_cache_key(cb_type)}", cb_view.isChecked())
        else:
            cb_view.setChecked(config_util.value(f"{self.name()}/{get_cb_cache_key(cb_type)}") == 'true')

    def parse_config(self, is_save=False):
        self.parse_cb(CbType.proxy, is_save=is_save)
        self.parse_cb(CbType.agent, is_save=is_save)
        self.parse_cb(CbType.splash, is_save=is_save)
